home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-08-04 | 2.5 KB | 135 lines | [TEXT/PJMM] |
- unit MySaveableWindow;
-
- interface
-
- uses
- OOMainLoop;
-
- type
- SaveableWindowObject = object(DObject)
- spec: FSSpec;
- named: boolean;
- has_been_modified: boolean; { Either set this, or override Modified }
- function Modified: boolean;
- procedure Create (id: integer);
- override;
- procedure DoClose;
- override;
- procedure BaseNew;
- procedure BaseOpen (fs: FSSpec);
- procedure BaseSave;
- procedure SaveAs (fs: FSSpec);
- procedure DoOpen;
- procedure DoSave;
- procedure DoSaveAs;
- end;
-
- implementation
-
- uses
- MyUtils, BaseGlobals, MyTypes, MyUtilities, MyStandardFile;
-
- function SaveableWindowObject.Modified: boolean;
- begin
- Modified := has_been_modified;
- end;
-
- procedure SaveableWindowObject.Create (id: integer);
- var
- tempname: str63;
- begin
- inherited Create(id);
- spec.vRefNum := 1;
- spec.parID := -1;
- spec.name := GetGlobalString(untitled_name);
- named := false;
- has_been_modified := false;
- tempname := spec.name;
- SetWTitle(window, tempname);
- end;
-
- procedure SaveableWindowObject.BaseNew;
- begin
- end;
-
- procedure SaveableWindowObject.BaseOpen (fs: FSSpec);
- begin
- end;
-
- procedure SaveableWindowObject.BaseSave;
- begin
- end;
-
- procedure SaveableWindowObject.BaseOpenAs;
- var
- reply: MySFReply;
- fs: FSSPec;
- begin
- GetFile1('TEXT', reply);
- with reply do
- if Rgood then begin
- fs.vRefNum := RVRefNum;
- fs.parID := RdirID;
- fs.name := Rfname;
- BaseOpen(fs);
- end
- else
- Destroy;
- end;
-
- procedure SaveableWindowObject.SaveAs (fs: FSSpec);
- begin
- spec := fs;
- named := true;
- SetWTitle(window, fs.name);
- BaseSave;
- end;
-
- procedure SaveableWindowObject.DoClose;
- var
- sc: SCType;
- begin
- sc := SCDiscard;
- if Modified then begin
- sc := SaveChanges;
- if sc = SCSave then begin
- DoSave;
- if Modified then
- sc := SCCancel; { if still modified, then the user didn't save, so they must have canceled }
- end;
- end;
- if sc <> SCCancel then
- Destroy;
- end;
-
- procedure SaveableWindowObject.DoSave;
- begin
- if not named then begin
- DoSaveAs;
- end
- else begin
- BaseSave;
- end;
- end;
-
- procedure SaveableWindowObject.DoSaveAs;
- var
- reply: MySFReply;
- tempname: str63;
- fs: FSSpec;
- begin
- if named then
- SetSFFile(spec.vRefNum, spec.parID);
- tempname := spec.name;
- PutFile('Save file as:', tempname, reply);
- with reply do begin
- if Rgood then begin
- fs.vRefNum := RVRefNum;
- fs.parID := RdirID;
- fs.name := Rfname;
- SaveAs(fs);
- end;
- end;
- end;
-
- end.